package q498_findDiagonalOrder;

public class Solution {

    /*
    对角线遍历
    实际上是按照数学思维进行分析的问题
    首先遍历时有两个方向 左下和右上
    我们考虑斜着的线一共有m + n - 1条
    所以考虑遍历时是奇数还是偶数来解决此时的方向问题
    同时要考虑此时遍历到了多少次 是否会触碰到边界 此时就需要重新指定出发点
     */
    public int[] findDiagonalOrder(int[][] mat) {
        int m = mat.length;
        int n = mat[0].length;
        int[] res = new int[m * n];
        int pos = 0;
        for (int i = 0; i < m + n - 1; i++) {
            if (i % 2 == 1) {
                int x = i < n ? 0 : i - n + 1;
                int y = i < n ? i : n - 1;
                while (x < m && y >= 0) {
                    res[pos] = mat[x][y];
                    pos++;
                    x++;
                    y--;
                }
            } else {
                int x = i < m ? i : m - 1;
                int y = i < m ? 0 : i - m + 1;
                while (x >= 0 && y < n) {
                    res[pos] = mat[x][y];
                    pos++;
                    x--;
                    y++;
                }
            }
        }
        return res;

    }
}
